argotを使ってコマンドラインツールを作ってみる


概要

Scalaのコマンドラインツール用parser 


argot

http://software.clapper.org/argot/


を使って、コマンドラインアプリケーションを作ってみる。

GNUっぽいコマンドライン

-p

--param

とかの短縮系を作れたり、


下記のような表記を勝手に生成してくれる。

スクリーンショット 2012-07-28 20.52.46.png

パラメータ、オプションについて、mustにしたりoptionalにしたりが簡単。

可変長なパラメータも取れる。


なによりScalaの型処理がいろいろ使えてまいうー。


Gradleの設定

このライブラリ自体が、同じ作者の別のライブラリに依存しているので、

解決しとく。


下記内容で、argot自体とargotが依存しているgrizzledっていうMathライブラリが解決できる。


compile (

[group: "org.clapper", name: "argot_2.9.2",version: "0.4"],

[group: "org.clapper", name: "grizzled-scala_2.9.0",version: "1.0.11.1"]

}



使用法想定

java -jar ツール.jar オプションとかパラメータ、みたいに使うのを想定する。



ライブラリ自体の簡単な利用方

1.argotをimportしとく

2.parserを定義

3.option引数とかを定義

4.parameter引数とかを定義

5.値を読む



1.argotをimportしとく

どうせ使うので、convertersもimport。


import org.clapper.argot._
import ArgotConverters._



2.parserを定義

importした上で、parserを定義する。

定義したaprserに文字列の配列を喰わせて使用する。


自分はそのまんまmain関数で使用するので、


def main(args : Array[String]) {
	val parser = new ArgotParser("MondogrossoFileObserver", preUsage = Some("Mondogrosso fileObserver"))
	//このへんにパラメータとかオプションとかの定義を足す
	parser.parse(args)
}


みたいなかんじ。



3.option引数とかを定義

例えば、ファイルを引数に取るオプションはこんな感じに定義できる


	val observe = parser.option[File](List("observe1"), "observe2", "Input files to read. If not specified, use stdin.") { (s, opt) =>
		val file = new File(s)
		if (!file.exists)
			parser.usage("Input file \"" + s + "\" does not exist.")
	
		file
	}



4.parameter引数とかを定義

文字列を読むような引数の場合、


	val req = parser.parameter[String]("foo", "some param", optional=false) {(s, opt) =>
		s
	}


optionalのtrue/falseで、必須かどうかが設定できる。



5.値を読む

当然だけど、parse後、読み込んだ値を使う事が出来る。

	parser.parse(args)
	println("find	" + find.value)


肝心な使い方

一応書いておくと、

java- jar ファイル名.jar -オプション opt パラメータ



やってみた系(actorとかも使っててごちゃごちゃしてるけど)

https://github.com/sassembla/MondogrossoFileObserver